// API使用方法:GETnpm init
// 使用json添加参数&type=json
// Json默认返回1张图,参数&num=图片数量(最高100)
// 服务器做了并发限制,超出连接返回403
// 同一个接口有不同服务器
// 是否可用,自己测试(超时切换就完事)
// iw233.cn ：60秒200次GET,超过拉黑IP 6小时
// dev.iw233.cn 并发连接：120，超出并发返回403
// api.iw233.cn 并发连接：100，超出并发返回403
// ————————
// 接口图片403解决办法
// 修改请求头Referer
// Referer:https://weibo.com/


// const fetch = require("node-fetch");
import fetch from "node-fetch"
const buf = Buffer.from('runoob', 'ascii');
// const schedule = require('node-schedule')
import schedule from 'node-schedule'
import fs from 'fs';
import path from 'path';
// import { fs } from 'fs';
// const path = require('path')
const __dirname = path.resolve();
// rule.second = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55]

fs.access(path.join(__dirname, './img'), (err) => {
    console.log(err ? '目录不存在' : '目录存在,可以进行读写')
    if (err) {
        fs.mkdir(path.join(__dirname, './img'), function (error) {
            if (error) {
                console.log('创建失败')
                return false
            }
            console.log('创建目录成功')
        })
    }
});

function _fetch(fetch_promise, timeout) {
    var abort_fn = null;
    //这是一个可以被reject的promise
    var abort_promise = new Promise(function (resolve, reject) {
        abort_fn = function () {
            reject('abort promise');
        };
    });
    //这里使用Promise.race，以最快 resolve 或 reject 的结果来传入后续绑定的回调
    var abortable_promise = Promise.race([
        fetch_promise,
        abort_promise
    ]);
    setTimeout(function () {
        abort_fn();
    }, timeout);
    return abortable_promise;
}


let job = schedule.scheduleJob('*/2 * * * * *', () => {
    let url = 'https://iw233.cn/api.php?sort=random&type=json' //图库网址
    fetch(url)
        .then(response => response.text())
        .then(data => {
            console.log(data)
            let DataCopy = JSON.parse(data)
            // console.log(DataCopy.pic)
            let goto = DataCopy.pic[0]
            console.log(goto)
            console.log(goto.slice(31))
            let type = { Referer: "https://weibo.com/" }
            _fetch(fetch(goto, type)
                .then(response => {
                    // response.arrayBuffer()
                    // console.log(response)
                    return response.arrayBuffer(); // 这一行是关键
                })
                .then(data => {
                    console.log(data)
                    const buffer = Buffer.from(data);
                    fs.writeFile(path.join(__dirname, './img', `${goto.slice(31)}`), buffer, function (err, data) {
                        if (err) {
                            console.log("位置错误");
                        }
                        if (data) { console.log("文件保存成功") }
                    })

                }), 1500).then(function (res) {
                    console.log("文件保存成功")
                }, function (err) {
                    console.log(err);
                })
        })
})